package command;

/**
 * @author chenyuan
 * @date 2020/10/29 15:30
 */

/**
 * 遥控器
 * 聚合命令集合
 */
public class RemoteController {
    // 开 的命令集合
    private Command[] onCommands;
    // 关 的命令集合
    private Command[] offCommands;
    // 撤销命令
    private Command undoCommand;

    // 构造器，完成对按钮的初始化
    public RemoteController(){
        onCommands = new Command[5];
        offCommands = new Command[5];
        for (int i = 0; i < 5; i++) {
            // 还没有设置具体是什么操作，就都是空命令
            // 就像初始化数组都是 0
            onCommands[i] = new NoCommand();
            offCommands[i] = new NoCommand();
        }
    }

    // 给按钮设置具体操作
    public void SetCommand(int no, Command onCommand, Command offCommand){
        onCommands[no] = onCommand;
        offCommands[no] = offCommand;
    }

    // 按下开按钮的处理
    public void OnButtonClicked(int no){
        // 执行 按下按钮对应的 “执行” 方法
        onCommands[no].execute();
        // 记录本轮操作，用于撤销
        undoCommand = onCommands[no];
    }

    // 按下关按钮的处理
    public void OffButtonClicked(int no){
        // 执行 按下按钮对应的 “执行” 方法
        offCommands[no].execute();
        // 记录本轮操作，用于撤销
        undoCommand = offCommands[no];
    }

    // 执行撤销操作
    public void undoButtonClicked(int no){
        undoCommand.undo();
    }
}
